package ntd.util.frame.action.enums;

import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ClassUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.db.Db;
import cn.hutool.db.Entity;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import cn.hutool.log.StaticLog;
import ntd.action.ActionAbs;
import ntd.action.bo.ActionInfo;
import ntd.action.bo.ActionOutBo;
import ntd.util.ToolCache;
import ntd.util.UtilCatch;
import ntd.util.config.common.bo.RequestInfo;
import ntd.util.config.common.enums.BaseEnumInterface;
import ntd.util.config.common.enums.FactoryEnum;
import ntd.util.frame.data.factory.FactoryData;
import ntd.util.frame.data.tool.ToolMysql;

import java.util.Set;

public class ActionEnumList extends ActionAbs {

    private static JSONObject obj = new JSONObject();

    @Override
    public ActionInfo info() {
        return new ActionInfo("系统枚举扫描列表", "action-enum-list", new ActionEnumList());
    }

    @Override
    public ActionOutBo handle() {
        if (obj.isEmpty()) {
//            Set<Class<?>> classes = ClassUtil.scanPackageBySuper("ntd", BaseEnumInterface.class);
//
//            for (Class<?> aClass : classes) {
//                obj.putOpt(StrUtil.toSymbolCase(StrUtil.removePrefix(aClass.getSimpleName(), "Enum"), '_'), aClass.getName());
//            }

            // liuwenju 20230605 为提高性能静态化枚举
            obj.set("server_app_type", "ntd.util.config.common.enums.app.EnumServerAppType");
            obj.set("msg_type", "ntd.util.config.common.enums.msg.EnumMsgType");
            obj.set("msg_handle", "ntd.util.config.common.enums.msg.EnumMsgHandle");
            obj.set("data_acquisition_rule_status", "ntd.util.config.common.enums.data.EnumDataAcquisitionRuleStatus");
            obj.set("protocol_type", "ntd.util.config.common.enums.data.EnumProtocolType");
            obj.set("data_acquisition_type", "ntd.util.config.common.enums.data.EnumDataAcquisitionType");
            obj.set("server_type", "ntd.util.config.common.enums.app.EnumServerType");
            obj.set("data_type", "ntd.util.config.common.enums.EnumDataType");
            obj.set("logic", "ntd.util.config.common.enums.EnumLogic");
            obj.set("msg_state", "ntd.util.config.common.enums.msg.EnumMsgState");
            obj.set("stream_url_protocol", "ntd.util.config.common.enums.protocol.EnumStreamUrlProtocol");
            obj.set("data_source_type", "ntd.util.config.common.enums.data.EnumDataSourceType");
            obj.set("mechanism_type", "ntd.util.config.common.enums.mechanism.EnumMechanismType");
            obj.set("status", "ntd.util.config.common.enums.EnumStatus");
            obj.set("task_type", "ntd.util.config.common.enums.task.EnumTaskType");
            obj.set("platform_type", "ntd.util.config.common.enums.EnumPlatformType");
            obj.set("res_type", "ntd.util.ai.enums.EnumResType");
            obj.set("app_type", "ntd.util.config.common.enums.app.EnumAppType");
            obj.set("flag", "ntd.util.config.common.enums.EnumFlag");
            obj.set("data_rule", "ntd.util.config.common.enums.EnumDataRule");
            obj.set("process_type", "ntd.util.config.common.enums.process.EnumProcessType");
            obj.set("task_cycle_type", "ntd.util.config.common.enums.task.EnumTaskCycleType");
        }


        return new ActionOutBo(obj);
    }

    public static void main(String[] args) {
        StaticLog.info(new ActionEnumList().handle().toString());
        StaticLog.info(new ActionEnumList().handle().toString());
    }

}
